import type { JPromptProps } from '../typing'
import { render, createVNode, nextTick } from 'vue'
import { error } from '/@/utils/log'
import JPrompt from '../JPrompt.vue'

export function useJPrompt() {
  function createJPrompt(options: JPromptProps) {
    let instance = null
    const box = document.createElement('div')
    const vm = createVNode(JPrompt, {
      // 注册
      async onRegister(ins) {
        instance = ins
        await nextTick()
        ins.openModal(options)
      },
      // 销毁
      afterClose() {
        render(null, box)
        document.body.removeChild(box)
      },
    })
    // 挂载到 body
    render(vm, box)
    document.body.appendChild(box)

    function getInstance(): any {
      if (instance == null) {
        error('useJPrompt instance is undefined!')
      }
      return instance
    }

    function updateModal(options: JPromptProps) {
      getInstance()?.updateModal(options)
    }

    function closeModal() {
      getInstance()?.closeModal()
    }

    function setLoading(loading) {
      getInstance()?.setLoading(loading)
    }

    return {
      closeModal,
      updateModal,
      setLoading,
    }
  }

  return {
    createJPrompt,
  }
}
